package com.test21_常用类;

import org.junit.Test;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * Math，数学计算类
 */
public class Demo07_Math {

    @Test
    public void test1() {
        System.out.println("【绝对值】" + Math.abs(-10.3));
        System.out.println("【最大值】" + Math.max(10, 30));
        System.out.println("【最小值】" + Math.min(10, 30));
        System.out.println("【正弦值】" + Math.sin(3.56));
        System.out.println("【对数值】" + Math.log(20));
    }

    @Test
    public void test2() {
        System.out.println("【四舍五入】" + Math.round(15.1));
        System.out.println("【四舍五入】" + Math.round(15.51));
        System.out.println("【四舍五入】" + Math.round(-15.1));
        System.out.println("【四舍五入】" + Math.round(-15.51));
    }

    @Test
    public void test3() {
        System.out.println("【四舍五入】" + MathUtil.round(15.3825489, 3));
    }
}

/**
 * 自定义数学工具类
 */
class MathUtil {
    private MathUtil() {    // 构造方法私有化
    }

    /**
     * 进行准确位数的四舍五入的处理操作
     * @param num 处理的数字
     * @param scale 保留小数位数
     * @return
     */
    public static double round(double num, int scale) {
        return Math.round(num * Math.pow(10.0, scale)) / Math.pow(10.0, scale);
    }

    /**
     * 通过BigDecimal实现四舍五入
     * @param num
     * @param scale
     * @return
     */
    public static double round2(double num, int scale) {
        return new BigDecimal(num).divide(new BigDecimal(1), scale, RoundingMode.HALF_UP).doubleValue();
    }
}
